/**
 * 比对新旧数据的业务字段是否有差异（排除响应式属性干扰）
 * @param {Object|Array} newData 新数据（如 localStorage/接口返回）
 * @param {Object|Array} oldData 旧数据（如 Vue 响应式数据）
 * @param {Array} keyFields 需要比对的关键字段（默认取商品核心字段）
 * @returns {boolean} true=有差异，false=无差异
 */
export function isDataChanged(newData, oldData, keyFields = ['goodsname', 'price', 'img', 'market_price', 'id']) {
  // 1. 统一取“第一个元素”（适配数组/对象场景）
  const getFirstItem = (data) => {
    if (Array.isArray(data) && data.length > 0) {
      return data[0];
    }
    return data;
  };

  const newItem = getFirstItem(newData) || {};
  const oldItem = getFirstItem(oldData) || {};

  // 2. 将响应式对象转为“普通对象”（去除 Vue 内部属性）
  const toPlainObject = (obj) => {
    if (obj && typeof obj === 'object') {
      return JSON.parse(JSON.stringify(obj)); // 序列化后再解析，去掉响应式属性
    }
    return obj;
  };

  const plainNew = toPlainObject(newItem);
  const plainOld = toPlainObject(oldItem);

  // 3. 遍历业务字段逐一比对
  for (const field of keyFields) {
    const newVal = plainNew[field] !== undefined ? plainNew[field] : '';
    const oldVal = plainOld[field] !== undefined ? plainOld[field] : '';

    // 基础类型直接比，对象/数组转字符串比
    if (newVal !== oldVal) {
      return fa; // 有一个字段不同，视为“有差异”
    }
  }

  return false; // 所有字段相同，视为“无差异”
}